From: Sebastian Wick Date: Sat, 21 Jun 2025 22:17:11 +0000 (+0200) Subject: status/brightness: Switch to the new BrightnessManager X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~116^2^2~6 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=146c324d29bf0a4fe648b913ca3f7b0f8a4d25b9;p=gnome-shell.git status/brightness: Switch to the new BrightnessManager Instead of looking at the monitor backlights directly, connect to the BrightnessManager global scales. Everything should continue working as before, this simply gives the BrightnessManager control over the actual backlight with the quick settings brightness sliders being one input. Part-of: --- diff --git a/js/ui/status/brightness.js b/js/ui/status/brightness.js index d1642f109..768186af3 100644 --- a/js/ui/status/brightness.js +++ b/js/ui/status/brightness.js @@ -1,6 +1,9 @@ import GObject from 'gi://GObject'; import {QuickSlider, SystemIndicator} from '../quickSettings.js'; +import * as Main from '../main.js'; + +const BRIGHTNESS_NAME = _('Brightness'); const BrightnessItem = GObject.registerClass( class BrightnessItem extends QuickSlider { @@ -9,70 +12,41 @@ class BrightnessItem extends QuickSlider { iconName: 'display-brightness-symbolic', }); - this.slider.accessible_name = _('Brightness'); - - const monitorManager = global.backend.get_monitor_manager(); - monitorManager.connectObject('monitors-changed', - this._monitorsChanged.bind(this), this); - this._monitorsChanged(); - - this._sliderChangedId = this.slider.connect('notify::value', - this._sliderChanged.bind(this)); - } - - _sliderChanged() { - this._setBrightness(this.slider.value); - } + this.slider.accessible_name = BRIGHTNESS_NAME; - _changeSlider(value) { - this.slider.block_signal_handler(this._sliderChangedId); - this.slider.value = value; - this.slider.unblock_signal_handler(this._sliderChangedId); + this._manager = Main.brightnessManager; + this._manager.connectObject('changed', + this._sync.bind(this), this); + this._sync(); } - _setBrightness(brightness) { - this._primaryBacklight?.block_signal_handler(this._brightnessChangedId); - this._monitors.forEach(monitor => { - const backlight = monitor.get_backlight(); - const {brightnessMin: min, brightnessMax: max} = backlight; - backlight.brightness = min + ((max - min) * brightness); + _sync() { + const {globalScale} = this._manager; + this.set({ + visible: !!globalScale, }); - this._primaryBacklight?.unblock_signal_handler(this._brightnessChangedId); - this._changeSlider(brightness); - } + if (!this.visible) + return; - _primaryBacklightChanged() { - const {brightness, brightnessMin: min, brightnessMax: max} = - this._primaryBacklight; - const target = (brightness - min) / (max - min); - this._setBrightness(target); + this._connectSlider(this.slider, globalScale); } - _setPrimaryBacklight(backlight) { - if (this._primaryBacklight) { - this._primaryBacklight.disconnect(this._brightnessChangedId); - this._brightnessChangedId = 0; - } - - this._primaryBacklight = backlight; - this.visible = !!backlight; - - if (this._primaryBacklight) { - this._brightnessChangedId = - this._primaryBacklight.connect('notify::brightness', - this._primaryBacklightChanged.bind(this)); - this._primaryBacklightChanged(); - } - } + _connectSlider(slider, scale) { + slider.disconnectObject(scale); + slider.connectObject('notify::value', () => { + if (slider._blockBrightnessAdjust) + return; + scale.value = slider.value; + }, scale); - _monitorsChanged() { - this._monitors = global.backend.get_monitor_manager() - .get_monitors() - .filter(m => m.get_backlight() && m.is_active()); - const primary = this._monitors.find(m => m.is_primary()) || - this._monitors[0]; - this._setPrimaryBacklight(primary?.get_backlight()); + const changeBrightness = () => { + slider._blockBrightnessAdjust = true; + slider.value = scale.value; + slider._blockBrightnessAdjust = false; + }; + scale.connectObject('notify::value', changeBrightness, slider); + changeBrightness(); } });